<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
	<button>点我</button>
</body>
<script>
	// * Null的环境：
	// * 对象原型链的终点
	// {
	// 	// 1
	// 	let str = "zhangsan";
	// 	console.log(str.__proto__ === String.prototype);
	// 	console.log(String.prototype.__proto__ === Object.prototype);
	// 	console.log(Object.prototype.__proto__  === null);
	//
	// 	// 2
	// 	function fn(){
	//
	// 	}
	//
	// 	console.log(fn.__proto__ === Function.prototype);
	// 	console.log(Function.prototype.__proto__ === Object.prototype);
	// 	console.log(Object.prototype.__proto__);// null
	//
	// 	// 3
	// 	function Box(){
	//
	// 	}
	// 	const obj = new Box();
	// 	console.log(obj.__proto__ === Box.prototype);
	// 	console.log(Box.prototype.__proto__ === Object.prototype);
	// 	console.log(Object.prototype.__proto__);// null
	// }
	
	
	
	// * 获取不到DOM元素
	// {
	// 	console.log(document.querySelector("#root"));// null
	// }
	
	// * Null的使用场景：
	// * 作为函数的参数，当你不想传，或者是不需要传参数时，可以使用null.
	// const p = new Promise(function(){
	// 	throw "异常"
	// })
	// p.then(null,function(reason){
	// 	console.log(reason)
	// })
	
	
	// * 赋值
	// let userName = null;
	// userName = "lisi";
	// * 内存回收
	// const btn = document.querySelector("button");
	// btn.onclick = function(){
	// 	console.log("click");
	// 	this.onclick = null;
	// }
	// * null和undefined的区别：
	// * undefined 代表变量没有赋值
	// * null 代表变量赋值，只是值为null
	
	console.log(localStorage.getItem("a"));// null
	console.log(localStorage.a);// undefined
	console.log(localStorage["a"]);// undefined
</script>
</html>